package com.yvon.service.demo.spring.beans.factory;

import com.yvon.service.demo.spring.beans.BeansException;
import com.yvon.service.demo.spring.beans.factory.config.AutowireCapableBeanFactory;
import com.yvon.service.demo.spring.beans.factory.config.BeanDefinition;
import com.yvon.service.demo.spring.beans.factory.config.ConfigurableBeanFactory;

/**
 * 可配置有助于bean工厂
 * 它还提供了分析和修改bean定义以及预实例化单例的工具
 *
 * @author : Yvon
 * @since : 2022-12-07
 */
public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {

    /**
     * 得到bean定义
     *
     * @param beanName bean名字
     * @return {@code BeanDefinition }
     */
    BeanDefinition getBeanDefinition(String beanName) throws BeansException;

    /**
     * 预实例化单例
     */
    void preInstantiateSingletons() throws BeansException;
}
